<?php
//TODO Terminar classe auth
class Auth {
	
	public $keys;
	public $logged;
	
	public $temp_test;
	
	
	public function __construct()
	{
		GLOBAL $session;
		
		$this->keys = array();
		
		$this->logged = $session->_auth['logged'];
		$this->keys = $session->_auth['keys'];
	}
	
	//Ao invéz disso da pra fazer usando a variavel direto da session
	public function __destruct()
	{
		$session->_auth['logged'] 	= $this->logged;
		$session->_auth['keys'] 	= $this->keys;
	}
	
	/**
	 * Seta as chaves que serão testadas no futuro
	 */
	public function set_keys($keys)
	{
		if ( is_array($keys) )
		{
			$this->keys = array_merge($this->keys, $keys);
		}
		else 
		{
			$this->keys[] = $keys;
		}
	}
	
	/**
	 * Testa se a chave existe. retorna true ou false
	 * Case sensitive
	 * 
	 * @param mixed $key palavra única, array de palavras ou string com palavras separadas por vírgula a serem testadas
	 * @param string $op define a operação a ser executada a cada teste no array de entrada (se for array ou string)
	 */
	public function test($key, $op = '||')
	{
		if ( !is_array($key) )
		{
			$key = str_replace(';', ',', $key);
			$key = str_replace(' , ', ',', $key);
			$key = str_replace(', ', ',', $key);
			$key = str_replace(' ,', ',', $key);
			
			$key = explode(',', $key);
			
			if ( !is_array($key) )
			{
				//chega aqui se é só uma string com um valor
				return in_array($key, $this->keys);
			}
		}

		$test = $op == '&&' ? true : false;
		
		foreach($key as $k)
		{
			$temp = in_array($k, $this->keys);
			
			if ( $op == '&&' )
			{
				$test = $test && $temp;
			}
			else 
			{
				$test = $test || $temp;					
			}
		}
		
		return $test;
	}
	
	public function lock($key, $op = '||')
	{
		if ( !$this->test($key, $op) )
		{
			if($logged) error404();
			else redirect("login");
		}
		
	}
}
